Explicación de los componentes e implementación del entorno ODRD (On-Demand Rides and Deliveries) de Google
Para lanzar el backend primero tenemos que configurar el siguiente archivo (dentro de la carpeta provider):
src\main\resources\config.properties
Modificamos los siguientes campos:
provider-id=YOUR_PROVIDER_ID
server-token-account=SERVER_TOKEN_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
consumer-token-account=CONSUMER_TOKEN_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
driver-token-account=DRIVER_TOKEN_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
Como provider-id indicamos el id de nuestro proyecto en google cloud
NOTA: Las cuentas de servicio no son las mismas que en LMFS.
En server-token-account tenemos que indicar una cuenta de servicio que tenga el rol Superusuario del servicio de Fleet Engine.
En consumer-token-account tenemos que indicar una cuenta de servicio que tenga el rol Usuario de SDK para el controlador de Fleet Engine.
En driver-token-account tenemos que indicar una cuenta de servicio que tenga el rol Usuario de SDK para el controlador de Fleet Engine.
Si alguna de las cuentas no tiene los roles indicados obtendremos un error al intentar añadir un nuevo viaje como el siguiente:
PERMISSION_DENIED: User does not have permissions to complete this request
Tenemos dos aplicaciones: Driver y Consumer
Para lanzar la aplicación android primero tenemos que realizar la siguiente configuración:
Dentro de la carpeta Android creamos un archivo local.properties con el siguietne contenido:
MAPS_API_KEY=<MAPS_API_KEY>
PROVIDER_ID=<PROVIDER_ID>
PROVIDER_URL=http://10.0.2.2:8080
Cambiamos <MAPS_API_KEY> y <PROVIDER_ID> por los datos corresopndientes a nuestro proyecto, el PROVIDER_URL podemos dejar ese, porque es la dirección local de nuestro sistema anfitrión dentro del emulador de android.
Una vez añadido este archivo podemos abrir la carpeta android con el android studio y desde ahí ejecutar los dos poryecto, tanto la Driver App como la Consumer App
Antes de ejecutar las aplicaciones de android tenemos que asegurarnos de tener el provider ejecutandose, si no no podremos crear nuevas tareas.
Si ya tenemos todo ejecutandose creamos un nuevo viaje usando la aplicación de cliente, y aceptamos el viaje usando la aplicación de conductor
Al intentar crear un viaje desde la aplicación cliente podemos encontrarnos con el siguiente error:
com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: User does not have permissions to complete this request
Este error se debe a que la cuenta de servicio server-token-account está mal configurada en el provider en el archivo src\main\resources\config.properties, puede ser que la cuenta no tenga los permisos necesarios, los permisos que tendría que tener esta cuenta son los de Superusuario del servicio de Fleet Engine.
Hay que tener cuidado porque hay dos roles que se parecen mucho: Superusuario del servicio de Fleet Engine y Superusuario de entrega de Fleet Engine. el que necesitamos en ODRD es el primero Superusuario del servicio de Fleet Engine
Para lanzar la aplicación web tenemos que realizar primero la siguiente configuración:
En el archivo src\app\journey-sharing-google-map\journey-sharing-google-map.component.ts tenemos que cambiar 3 variables: PROVIDER_URL, apiKey y projectId. En el caso de PROVIDER_URL podemos indicar la dirección local http://127.0.0.1:8080
Una vez hechos estos cambios ya podemos ejecutar la applicación angular:
npm install
npm serve
Por defecto las solicitudes que haga la aplicación web al backend (provider) serán bloqueadas por la politica CORS del navegador.
Para solucionar este problema tenemos que modificar el backend (provider) de la siguiente manera:
En el archivo src\main\java\com\example\provider\TokenServlet.java añadimos la siguiente linea de código:
response.addHeader("Access-Control-Allow-Origin", "*");
El asterisco indica que cualquier origen puede hacer solicitudes al servidor, si queremos podemos indicar un dominio concreto.
Una vez hecho este cambio en el backend podemos realizar solicitudes sobre viajes creados desde la aplicación web.
Desde la aplicación android de cliente creamos un nuevo viaje, desde la aplicación de conductor aceptamos el viaje, a continuación en la consola donde estamos ejecutando el provider cogemos el id del viaje y lo pegamos en la aplicación Web, y podremos ver el estado del viaje y la posición actual del conductor.
Al lanzar el proyecto obtenemos el siguiente error:
Could not resolve all artifacts for configuration ':classpath'.
Este error se da porque para que el proyecto funcione necesitamos Java 8 si tenemos otra versión mas nueva se dará ese error, para solucionarlo solo tenemos que instalar Java 8 y actualizar la variable JAVA_HOME.
java | ODRD